package com.hwn.datax.service.impl;


import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.hwn.datax.domain.RepositoryConfig;
import com.hwn.datax.service.ConfigService;
import com.hwn.datax.service.RepositoryConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *
 */
@Service
@Slf4j
public class RepositoryConfigServiceImpl implements RepositoryConfigService {


    ConfigService configService;

    @Autowired
    public RepositoryConfigServiceImpl(ConfigService configService) {
        this.configService = configService;
        JSONObject serviceConfig = configService.getConfig(CONFIG_KEY);
        if (serviceConfig != null) {
            serviceConfig.forEach((k, v) -> {
                RepositoryConfig bean = JSONUtil.toBean(v.toString(), RepositoryConfig.class);
                repositoryConfigMap.put(k, bean);
            });
        }
    }

    private static final Map<String, RepositoryConfig> repositoryConfigMap = new HashMap<>();

    private final static String CONFIG_KEY = "RepositoryConfig";

//    static {
//        ClassPathResource classPathResource = new ClassPathResource("db-config");
//        String absolutePath = classPathResource.getAbsolutePath();
//        Arrays.stream(FileUtil.ls(absolutePath)).distinct().forEach(file -> {
//            String fileName = FileUtil.getPrefix(file);
//            try {
//                JDBC_TYPE jdbcType = JDBC_TYPE.valueOf(fileName);
//                Integer type = jdbcType.getType();
//                String content = FileUtil.readUtf8String(file);
//                if (JSONUtil.isTypeJSON(content)) {
//                    RepositoryConfig bean = JSONUtil.toBean(content, RepositoryConfig.class);
//                    bean.setId(type);
//                    bean.setDbName(jdbcType.getName());
//                    repositoryConfigMap.put(type, bean);
//                }
//            } catch (IllegalArgumentException e) {
//                log.warn("读取配置文件异常", e);
//            }
//        });
//    }


    /**
     * 获取数据库配置
     *
     * @param dbTypeName
     * @return
     */
    @Override
    public RepositoryConfig getByDb(String dbTypeName) {
        return repositoryConfigMap.get(dbTypeName);
    }

    /**
     * 获取全部
     *
     * @return
     */
    @Override
    public List<RepositoryConfig> list() {
        return repositoryConfigMap.values().stream().toList();
    }

    @Override
    public void save(RepositoryConfig repositoryConfig) {
        repositoryConfigMap.put(repositoryConfig.getDbName(), repositoryConfig);
        configService.saveConfig(CONFIG_KEY, JSONUtil.toJsonStr(repositoryConfigMap));
    }
}




